package com.huishu.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.huishu.commons.pojo.Result;
import com.huishu.commons.pojo.vo.UserOrderInfoVO;
import com.huishu.order.pojo.dto.*;
import com.huishu.order.pojo.model.OrderDO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 订单表 服务类
 * </p>
 *
 * @author generator@ljj
 * @since 2023-04-07
 */
public interface OrderService extends IService<OrderDO> {

    /**
     * 快递信息回传
     *
     * @param expressDeliveryDTO
     * @return
     */
    Result expressDeliveryNotify(ExpressDeliveryDTO expressDeliveryDTO);

    /**
     * 创建订单
     *
     * @param createOrderDTO
     * @return
     */
    Result createOrder(CreateOrderDTO createOrderDTO, HttpServletRequest request);

    /***
     * 微信支付成功回调
     * @param request
     * @param response
     * @return
     */
    void payNotify(HttpServletRequest request, HttpServletResponse response);

    /**
     * 修改订单支付状态和扣减库存
     *
     * @param map
     */
    void updateStatusDeductionStock(Map<String, String> map);

    /**
     * 取消订单回滚redis库存
     *
     * @param orderSn
     */
    void cancelOrderRollbackStock(String orderSn);

    /**
     * 查询订单详情
     *
     * @param id
     * @return
     */
    Result orderDetailed(Long id);

    /**
     * 查询全部订单
     *
     * @return type 0全部 1 待支付 2代发货 3 已发货 4 已经签收(已完成)  5 退款
     */
    Result findByType(Integer type);


    /**
     * 分页查询
     * @param pageListDTO
     * @return
     */
    Result pageList(PageListDTO pageListDTO);

    /**
     * 导出
     * @param pageListDTO
     * @param response
     */
    void export(PageListDTO pageListDTO, HttpServletResponse response);

    /**
     * 获取控制台数据
     * @return
     */
    Result consoleData(ConsoleDataDTO consoleDataDTO);

    /**
     * 修改收货地址
     * @param updateAddressDTO
     * @return
     */
    Result updateAddress(UpdateAddressDTO updateAddressDTO);

    /**
     * 签收
     * @param id
     * @return
     */
    Result confirm(Long id);

    /**
     * 继续支付
     * @param orderSn
     * @return
     */
    Result continuePay(String orderSn);

    /**
     * 获取用户订单信息
     * @param ids
     * @return
     */
    Result<List<UserOrderInfoVO> >  getOrderInfoByUserIds(List<Long> ids);

    /**
     * 退款
     * @param id
     * @return
     */
    Result refund(Long id);

    /**
     * 申请换货
     * @param id
     * @return
     */
    Result applicationExchange(Long id);

    /**
     * 退单（换货）
     * @param id
     * @return
     */
    Result chargeback(Long id);

    /**
     * 退单并且退款
     * @param id
     * @return
     */
    Result refundChargeback(Long id);

    /**
     * 取消订单
     * @param id
     * @return
     */
    Result cancellation(Long id);

    /**
     * 申请退款
     * @param id
     * @return
     */
    Result applicationRefund(Long id);

    /**
     * 申请退货退款
     * @param id
     * @return
     */
    Result applicationRefundGoods(Long id);

    /**
     * 后台详情
     * @param id
     * @return
     */
    Result backgroundDetails(Long id);

    /**
     * 拒绝退款
     * @param id
     * @return
     */
    Result refuseRefund(Long id);

    /**
     * 拒绝换货
     * @param id
     * @return
     */
    Result refuseChargeback(Long id);

    /**
     * 拒绝退款退货
     * @param id
     * @return
     */
    Result refuseChargebackRefund(Long id);
}
